my file learn about tech container (docker, podman, kubernetes)
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.29.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
# or
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
docker compose version
# docker-compose or docker compose
docker-compose up --force-recreate # create ulang / network yang error
docker-compose create # membuat container
docker-compose start # start container semua docker container yang di konfigurasi
docker-compose ps # list container yang ada pada file konfigurasi
docker-compose stop # stop container yang ada pada konfigurasi
docker-compose down # menghapus container, volume, network (meskipun sedang container berjalan)
docker-compose ls # list docker compose (list berdasarkan nama folder yang berisi docker-compose.yaml yang sudah dibuat)
docker-compose build # hanya melakukan build docker file / image
docker compose -f prod.yaml create
docker compose -f prod.yaml start
docker compose -f prod.yaml down
docker compose -f docker-compose.yaml -f prod.yaml create
docker events --filter 'container=nama' # melihat kejadian secara realtime
version: "3.18"
services:
nginx-aria:
container_name: nginx-aria
image: nginx:latest
HOST:CONTAINER
misal 8080:80
target: <port didalam container>
published: <port yang digunakan di host>
protocol: <jenis port (TCP/UDP)>
mode: <host untuk port di tiap node, atau ingress untuk swarm mode>
# karena kita tidak menggunakan docker swarm. jadi kita cukup gunakan nilai host
# docker-compose.yaml
version: "3.18"
services:
nginx-aria-1:
container_name: nginx-aria-1
image: nginx
ports:
- target: 80
published: 8081
protocol: tcp
nginx-aria-2:
container_name: nginx-aria-2
image: nginx
ports:
- "8082:80"
environment
MONGO_INITDB_ROOT_USERNAME: ariafatah
MONGO_INITDB_ROOT_PASSWORD: ariafatah
MONGO_INITDB_DATABASE:
SOURCE:TARGET:MODE
# SOURCE => lokasi di host (bisa gunakan relative path dengan diawali titik atau absolute path)
# TARGET => lokasi di container
# MODE => mode bind mount
# ro (read only)
# rw (read write) default
volumes:
- "./data:/data/db"
type: volume/bind # type mount, (volume/bind)
source: ./data # target path di container
target: /data/db # target path di container
read_only: false # flag read only atau tidak defaultnya false
volumes:
- type: bind
source: "./data-2"
target: "/data/db"
read_only: false
volumes:
mongo-data1:
name: mongo-data-1
mongo-data-2:
name: mongo-data-2
services:
mongodb-1:
volumes:
- "mongo-data-1:/data/db"
mongodb-2:
volumes:
- type: volume
source: mongo-data-2
target: "/data/db"
read_only: false
networks:
network-harbas:
name: network-harbas
driver: bridge/host/none # type network
mongodb-harbas:
networks:
- network-harbas
services:
mongodb-server: # ini
image: mongo
mongodb-express-web:
container_name: mongodb-express-web
image: mongo-express
depends_on:
- mongodb-server # id nya bukan name contianer
restart: <option>
# option
no #default nya tidak pernah restart
always # selalu restart jika container berhenti
on-failure # restart jika container error dengan indikasi error ketike exit
unless-stopped # selalu restart container ketika dihentikan manual
deploy:
resources:
reservations:
cpus: "0.25"
memory: 50M
limits:
cpus: "0.5"
memory: 100M
docker container stats
version: '3.8'
services:
nginx-aria-1:
container_name: nginx-aria-1
image: nginx
ports:
- target: 80
published: 8081
protocol: tcp
deploy:
resources:
reservations:
cpus: "0.25"
memory: 50M
limits:
cpus: "0.5"
memory: 100M
services:
app:
container_name: app
build:
context: ./app
dockerfile: dockerfile
image: "app-golang:1.0.0" # nama image
environment:
- "APP_PORT=9000"
ports:
- "9000:9000"
# context => lokasi folder path berisi dockerfile
# dockerfil => nama dockerfile
# image => nama image hasil build
# args => argument untuk environment docker file
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 1m30s
timeout: 30s
retries: 3
start_period: 5s
health check
# test => berisikan cara melakukan test health check
# interval
# timeout
# retries => total retry
# start_period => waktu mulai
version: '3.9'
services:
app:
container_name: app
build:
context: "./app"
dockerfile: Dockerfile
image: "app-golang:3.0.0"
environment:
- "APP_PORT=8080"
- "MODE=local"
ports:
- "8080:8080"
# prod.yaml
version: '3.9'
services:
app:
environment:
- "MODE=prod"